define(`shift2', `shift(shift($@))')dnl
define(`m4_my_join',`ifelse( `$#',`0',`',`ifelse(`$#',`1',`$1',`$1 m4_my_join(`shift($@)')')')')dnl
dnl
define(`m4_inherited',`')dnl
define(`m4_makeArgs', `ifelse( `$#', `0',`',`$#', `1',`',`$#', `2',`$1 $2', `$1 $2, m4_makeArgs(shift2($@))')' )dnl
dnl
define(`m4_makeDebugArgs', `ifelse( `$#', `0',`',`$#', `1',`',`$#', `2',`<< "$1 $2=" << &$2', `<< "$1 $2=" << &$2 m4_makeDebugArgs(shift2($@))')' )dnl
dnl
define(`m4_makeDebug', `pDebug( this << " $1(" m4_makeDebugArgs( shift($@) ) << ")")')dnl
dnl
define(`m4_dProto', `ifelse( `$#', `0', `Error', `$1 ( m4_makeArgs( shift($@) )) m4_inherited {
   m4_makeDebug($@)')
' )dnl
dnl
define(`m4_dProto_const', `ifelse( `$#', `0', `Error', `$1 ( m4_makeArgs(shift($@) )) const m4_inherited {
   m4_makeDebug($@)' )
' )dnl This Macro is for const methdos
dnl
dnl m4_dProto(`int prot', `int', `a', `char*', `filename')
dnl m4_dProto(`int prot')
